/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import entities.AccionEstrategica;
import entities.EstatusTiempo;
import entities.Tarea;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import servicios.ServicioAccionEstrategica;
import servicios.ServicioTarea;

/**
 *
 * @author curso
 */
@ManagedBean
@ViewScoped
public class AccionBean {
    private AccionEstrategica accionEstrategica;    
    
    
    @EJB
    ServicioAccionEstrategica servicioAccionEstrategica;
    @EJB
    ServicioTarea servicioTarea; 

    /** Creates a new instance of AccionBean */
    public AccionBean() {
    }
    
    public String guardarAccion(){        
        servicioAccionEstrategica.guardar(accionEstrategica);
        return "index.faces";
    }
    
    public List<AccionEstrategica> verAcciones(){
        return servicioAccionEstrategica.verTodos();
    }
            
    public String modificar(){
        servicioAccionEstrategica.modificar(accionEstrategica);
        return "index.faces"; //?faces-redirect=true
    }
    
    public String borrar(){
        servicioAccionEstrategica.borrar(accionEstrategica.getId());
        return "index.faces";
    }
    public List<Tarea> verTareas(){
        return accionEstrategica.getTareas();
    }
    
    public Boolean estatusSegunTareas(AccionEstrategica noooo){
        List<Tarea> t = noooo.getTareas();
        Boolean statusSegunTarea= false;
        if(t.isEmpty()){
            statusSegunTarea = false;
            
        }else{
        for (Tarea tarea : t) {
            servicioTarea.modificarTarea(tarea);            
            if(tarea.getStatus()!=EstatusTiempo.CONCLUIDA){                
                
                statusSegunTarea = false;
                break;
            }else{
                statusSegunTarea = true;
            }       
        }
        }
        
        return statusSegunTarea;
    
    }
    
    public String nuevoModificar(){        
        List<Tarea> t = accionEstrategica.getTareas();
             
        if(t.isEmpty()){
            accionEstrategica.setEstatus(false);
            
        }else{
        for (Tarea tarea : t) {
            servicioTarea.modificarTarea(tarea);            
            if(tarea.getStatus()!=EstatusTiempo.CONCLUIDA){                
                
                accionEstrategica.setEstatus(false);
                break;
            }else{
                accionEstrategica.setEstatus(true);
            }       
        }
        }
        servicioAccionEstrategica.modificar(accionEstrategica);
        return "index.faces";
    }
    
    public Boolean estatusHijas(AccionEstrategica accion){
        Boolean chek=false;
        List<AccionEstrategica> l = accion.getHijas();        
        
        if(l.isEmpty()){
            chek= accion.getEstatus();
            System.out.println("estado ke traia");
        }else{      //true terminada
                    //false no terminada
            //revisa hijas
        for (AccionEstrategica accionHija : l) {
            if(estatusHijas(accionHija) && estatusSegunTareas(accion)){                
                chek = true;
               
            }else{
                chek = false;
                System.out.println("false 1");
                break;
                
            }                   
        }        
        }
        accion.setEstatus(chek);
        servicioAccionEstrategica.modificar(accion);
        return chek;
    }
    
    public AccionEstrategica getAccionEstrategica() {
        return accionEstrategica;
    }

    public void setAccionEstrategica(AccionEstrategica accionEstrategica) {
        this.accionEstrategica = accionEstrategica;
    }

    public ServicioAccionEstrategica getServicioAccionEstrategica() {
        return servicioAccionEstrategica;
    }

    public void setServicioAccionEstrategica(ServicioAccionEstrategica servicioAccionEstrategica) {
        this.servicioAccionEstrategica = servicioAccionEstrategica;
    }
        
    @PostConstruct
    public void inicializar(){
        accionEstrategica = new AccionEstrategica();       
    }
}
